/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package ifpb.pod.cliente.funcionalidades;

import ifpb.pod.cliente.visao.GUIConversa;
import ifpb.pod.model.Contato;
import ifpb.pod.model.Noticia;
import ifpb.pod.registro.Registro;
import ifpb.pod.remote.ClienteRemote;
import ifpb.pod.remote.ServidorRemote;
import java.net.MalformedURLException;
import java.rmi.AccessException;
import java.rmi.NotBoundException;
import java.rmi.RemoteException;
import java.rmi.server.UnicastRemoteObject;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;

/**
 *
 * @author Diogenes
 */
public class ClienteRemotoImpl extends UnicastRemoteObject implements ClienteRemote {

    private Contato contato;
    private FachadaCliente fachadaCliente;
//    private Registro registro;
    private ServidorRemote servidor;

    public ClienteRemotoImpl(Contato contato) throws RemoteException {
        try {
            this.contato = contato;
            try {
                //            this.registro = new Registro();
                //                    LocateRegistry.getRegistry("localhost", 10790);
                this.servidor = (ServidorRemote) Registro.lookup("facadaServidor");
            } catch (MalformedURLException ex) {
                Logger.getLogger(ClienteRemotoImpl.class.getName()).log(Level.SEVERE, null, ex);
            }
            this.fachadaCliente = FachadaCliente.getInstance();
        } catch (NotBoundException ex) {
            ex.printStackTrace();
        } catch (AccessException ex) {
            ex.printStackTrace();
        } catch (RemoteException ex) {
            ex.printStackTrace();
        }
    }

//    public Boolean removerUsuario(Usuario usuario){
//        return true;
//    }
    public void solicitarConversa(Contato destinatario) throws RemoteException {
        ArmazemDeConversas armazem = ArmazemDeConversas.getInstance();
        if (!armazem.temConversa(destinatario)) {
            ClienteRemote cliente = servidor.solicitarConversaCliente(contato, destinatario);
            GUIConversa conversa = new GUIConversa(contato, cliente);
            armazem.adicionaConversa(conversa.getStringContatos(), conversa);
            conversa.setVisible(true);
        }

    }

    public void solicitarConversaGrupo(Contato remetente, Contato convidado, List<Contato> contatosDaConversa, Boolean mediador) throws RemoteException {
//        System.out.println("-------------------------------------");
//        ArmazemDeConversas armazem = ArmazemDeConversas.getInstance();
////        GUIConversa conversa = armazem.getConversaGambiarra(contatosDaConversa);
////        System.out.println(conversa + "conv1");
//        GUIConversa retornoConversa = armazem.removeConversaGambiarra(contatosDaConversa);
//        System.out.println(retornoConversa + "conv2");
//
//        System.out.println("-------------------------------------");

        fachadaCliente.solicitarConversaGrupo(remetente, convidado, contatosDaConversa, mediador);
    }

    public void receberMensagem(Contato remetente, String mensagem) throws RemoteException {
        ArmazemDeConversas armazem = ArmazemDeConversas.getInstance();
        armazem.getConversa(remetente).receberMensagem(mensagem);
    }

    public void notificaStatusUsuario() throws RemoteException {
        System.out.println("Olha cheou aqui entrou gente");
        fachadaCliente.notificaStatusUsuario();
        System.out.println("Sai da notificação nççao tem gente");

    }

    public void enviarNoticia(Noticia noticia, List<Contato> destinatarios) throws RemoteException {
        servidor.enviarNoticia(noticia, destinatarios);
    }

    public Contato getContato() throws RemoteException {
        return this.contato;
    }

    public void notificarNoticia() {
        fachadaCliente.notificarNoticia();
    }



}
